import { Elysia, t } from 'elysia';
import {
  getContacts,
  getPublicContacts,
  getContact,
  createContact,
  updateContact,
  deleteContact,
  updateContactsSort
} from '../controllers/contactController';
import { guestAccessMiddleware } from '../middleware/auth';

export const contactRoutes = new Elysia({ prefix: '/contacts' })
  // 公开路由 - 前台展示
  .get('/public', getPublicContacts, {
    detail: {
      tags: ['Contacts'],
      summary: '获取公开联系人信息',
      description: '获取前台展示的联系人信息，不包含敏感数据'
    }
  })
  
  // 需要登录权限的路由（游客可查看，管理员可编辑）
  .use(guestAccessMiddleware())
  .get('/', getContacts, {
    detail: {
      tags: ['Contacts'],
      summary: '获取联系人列表',
      description: '获取所有联系人信息（管理端）'
    }
  })
  .get('/:id', getContact, {
    detail: {
      tags: ['Contacts'],
      summary: '获取单个联系人',
      description: '根据ID获取联系人详细信息'
    },
    params: t.Object({
      id: t.String({ description: '联系人ID' })
    })
  })
  .post('/', createContact, {
    detail: {
      tags: ['Contacts'],
      summary: '创建联系人',
      description: '创建新的联系人信息'
    },
    body: t.Object({
      name: t.String({ description: '姓名' }),
      position: t.Optional(t.String({ description: '职位' })),
      phone: t.String({ description: '电话号码' }),
      wechat: t.Optional(t.String({ description: '微信号' })),
      email: t.Optional(t.String({ description: '邮箱' })),
      avatar: t.Optional(t.String({ description: '头像URL' })),
      description: t.Optional(t.String({ description: '描述' })),
      specialties: t.Optional(t.String({ description: '专业技能（JSON数组）' })),
      workingHours: t.Optional(t.String({ description: '工作时间' })),
      languages: t.Optional(t.String({ description: '语言能力（JSON数组）' })),
      isPublic: t.Optional(t.Boolean({ description: '是否公开显示，默认为true' })),
      isActive: t.Optional(t.Boolean({ description: '是否激活，默认为true' })),
      sort: t.Optional(t.Number({ description: '排序，默认为0' }))
    })
  })
  .put('/:id', updateContact, {
    detail: {
      tags: ['Contacts'],
      summary: '更新联系人',
      description: '更新联系人信息'
    },
    params: t.Object({
      id: t.String({ description: '联系人ID' })
    }),
    body: t.Partial(t.Object({
      name: t.String(),
      position: t.String(),
      phone: t.String(),
      wechat: t.String(),
      email: t.String(),
      avatar: t.String(),
      description: t.String(),
      specialties: t.String(),
      workingHours: t.String(),
      languages: t.String(),
      isPublic: t.Boolean(),
      isActive: t.Boolean(),
      sort: t.Number()
    }))
  })
  .delete('/:id', deleteContact, {
    detail: {
      tags: ['Contacts'],
      summary: '删除联系人',
      description: '删除指定联系人'
    },
    params: t.Object({
      id: t.String({ description: '联系人ID' })
    })
  })
  .put('/batch/sort', updateContactsSort, {
    detail: {
      tags: ['Contacts'],
      summary: '批量更新联系人排序',
      description: '批量更新联系人的排序值'
    },
    body: t.Object({
      contacts: t.Array(t.Object({
        id: t.String({ description: '联系人ID' }),
        sort: t.Number({ description: '排序值' })
      }))
    })
  });